home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / ins_msb / 9008 / testdemo.bas < prev    next >
BASIC Source File  |  1990-07-11  |  5KB  |  156 lines

  1. '----------------------------------------------------------------
  2. 'Menu driven routines to test the string table routines
  3. '----------------------------------------------------------------
  4. DECLARE FUNCTION RandomSymbol$ (Parms AS ANY)
  5. DEFINT A-Z
  6.  
  7. '$INCLUDE: 'TABLMNGR.BI'
  8.  
  9.   RANDOMIZE TIMER
  10.  
  11.   CONST True = -1, False = 0
  12.  
  13.   DIM Sym AS SymbolTableParameters
  14.  
  15.   Sym.Delim = "\"
  16.   Sym.Width = 10
  17.  
  18.   IF SymCreateTbl(SymTbl$, Sym, 1) THEN
  19.  
  20.     DO WHILE True
  21.  
  22.       CLS
  23.  
  24.       PRINT "<C>reate/Initialize table"
  25.       PRINT "<A>dd a symbol"
  26.       PRINT "<D>elete a symbol"
  27.       PRINT "<P>rint symbol table"
  28.       PRINT "<F>ill table"
  29.       PRINT "<S>earch for entry"
  30.       PRINT "s<T>ore table to disk"
  31.       PRINT "<R>etrieve table from disk"
  32.       PRINT
  33.       PRINT "<Q>uit"
  34.       PRINT
  35.       INPUT "Enter option: "; Response$
  36.  
  37.       PRINT
  38.  
  39.       SELECT CASE UCASE$(Response$)
  40.         CASE "Q"
  41.           EXIT DO
  42.         CASE "C"
  43.           SymTbl$ = ""
  44.           INPUT "Enter number of records to size table:"; NbrRecs
  45.           Successful = SymCreateTbl(SymTbl$, Sym, NbrRecs)
  46.           IF NOT Successful THEN EXIT DO
  47.         CASE "A"
  48.           INPUT "Enter symbol: "; Symbol$
  49.           IF INSTR(Symbol$, Sym.Delim) <> 0 THEN
  50.             PRINT "Error - Symbol contains the delimiter"
  51.             GOSUB Pause
  52.           ELSE
  53.             IF NOT SymDefine(SymTbl$, Symbol$, Sym) THEN
  54.               PRINT Symbol$; " - Can't add duplicate symbols."
  55.               GOSUB Pause
  56.             END IF
  57.           END IF
  58.         CASE "D"
  59.           INPUT "Enter symbol: "; Symbol$
  60.           IF INSTR(Symbol$, Sym.Delim) <> 0 THEN
  61.             PRINT "Error - Symbol contains the delimiter"
  62.             GOSUB Pause
  63.           ELSE
  64.             IF NOT SymUnDefine(SymTbl$, Symbol$, Sym) THEN
  65.               PRINT Symbol$; " - Can't delete undefined symbol."
  66.               GOSUB Pause
  67.             END IF
  68.           END IF
  69.         CASE "P"
  70.           IF Sym.NbrEntries THEN
  71.             CALL SymDisplayTbl(SymTbl$, Sym)
  72.           ELSE
  73.             PRINT "No symbols defined"
  74.           END IF
  75.           GOSUB Pause
  76.         CASE "F"
  77.           INPUT "Enter the # of symbols to create: "; NLoops
  78.           A! = TIMER
  79.           FOR I = 1 TO NLoops
  80. L:          Symbol$ = RandomSymbol$(Sym)
  81.             IF NOT SymDefine(SymTbl$, Symbol$, Sym) THEN
  82.               BEEP  'Collision
  83.               GOTO L
  84.             END IF
  85.             LOCATE 20, 20: PRINT USING "#### "; I;
  86.             PRINT Symbol$ + SPACE$(30)
  87.           NEXT I
  88.           B! = TIMER
  89.           PRINT "Elapsed time for setting";
  90.           PRINT USING " ##,### entries: ###.##"; NLoops; B! - A!
  91.           PRINT USING "##.##### "; (B! - A!) / NLoops;
  92.           PRINT "seconds per create"
  93.           GOSUB Pause
  94.         CASE "S"
  95.           INPUT "Enter the number of lookups: "; NLoops
  96.           TestSym$ = SymGet$(SymTbl$, Sym.NbrEntries - 1, Sym)
  97.           PRINT "Looking for "; TestSym$
  98.           A! = TIMER
  99.           FOR I = 1 TO NLoops
  100.             S% = SymDefined(SymTbl$, TestSym$, Sym)
  101.           NEXT I
  102.           B! = TIMER
  103.           PRINT "Elapsed time for lookups";
  104.           PRINT USING " ##,### entries: ###.##"; NLoops; B! - A!
  105.           PRINT USING "##.##### "; (B! - A!) / NLoops;
  106.           PRINT "seconds per lookup"
  107.           GOSUB Pause
  108.         CASE "T"  'Store table to the file
  109.           KILL "SYMBOL.TBL"
  110.           OPEN "B", 1, "Symbol.tbl"
  111.           PUT 1, , Sym
  112.           PUT 1, , SymTbl$
  113.           CLOSE 1
  114.         CASE "R"  'Get the table from file
  115.           OPEN "B", 1, "Symbol.tbl"
  116.           GET 1, , Sym
  117.           IF Sym.TblLength > 0 THEN
  118.             SymTbl$ = SPACE$(Sym.TblLength)
  119.             GET 1, , SymTbl$
  120.           END IF
  121.           CLOSE 1
  122.         CASE ELSE
  123.           BEEP
  124.       END SELECT
  125.     LOOP
  126.   ELSE
  127.     PRINT "Couldn't pre-allocate table"
  128.   END IF
  129.  
  130. END
  131.  
  132. Pause:
  133.   PRINT : PRINT "Press a key to continue...."
  134.   WHILE LEN(INKEY$) = 0: WEND
  135.   RETURN
  136.  
  137. '----------------------------------------------------------------
  138. 'Create a random symbol for test lookups
  139. '----------------------------------------------------------------
  140. FUNCTION RandomSymbol$ (Parms AS SymbolTableParameters)
  141.  
  142.   R$ = ""
  143.  
  144.   FOR I = 1 TO INT((Parms.Width - 5 + 1) * RND + 5)
  145.  
  146. L1: C% = INT((26 * RND + 65)   'A to Z
  147.     IF C% = ASC(Parms.Delim) THEN GOTO L1:
  148.     R$ = R$ + CHR$(C%)
  149.  
  150.   NEXT I
  151.  
  152.   RandomSymbol$ = R$
  153.  
  154. END FUNCTION
  155.  
  156.